package cn.com.css.taxInspection.attention.service.impl;

import cn.com.css.taxInspection.attention.entity.QtjaEntity;
import cn.com.css.taxInspection.attention.mapper.QtjaMapper;
import cn.com.css.taxInspection.attention.service.QtjaService;
import cn.com.css.taxInspection.system.service.impl.HttpSessionService;
import cn.com.css.taxInspection.util.TsBqUtils;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;

@Service("QtjaService")
public class QtjaServiceImpl extends ServiceImpl<QtjaMapper, QtjaEntity> implements QtjaService {

    @Resource
    private HttpSessionService httpSessionService;

    @Override
    @DS("oracle")
    public IPage<QtjaEntity> queryQtjaTable(QtjaEntity qtjaEntity) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //获取当前税务机关代码
        String currentSwjgDm = httpSessionService.getCurrentDeptNo();
        String swjgDmTmp = currentSwjgDm.substring(0, 9);
        IPage<QtjaEntity> page = new Page<>(qtjaEntity.getPage(), qtjaEntity.getLimit());
        LambdaQueryWrapper<QtjaEntity> queryWrapper = Wrappers.lambdaQuery();
        //案件编号
        if (TsBqUtils.isNotNull(qtjaEntity.getJcajbh())) {
            queryWrapper.like(QtjaEntity::getJcajbh, qtjaEntity.getJcajbh());
        }
        //纳税人识别号
        if (TsBqUtils.isNotNull(qtjaEntity.getNsrsbh())) {
            queryWrapper.like(QtjaEntity::getNsrsbh, qtjaEntity.getNsrsbh());
        }
        //纳税人名称
        if (TsBqUtils.isNotNull(qtjaEntity.getNsrmc())) {
            queryWrapper.like(QtjaEntity::getNsrmc, qtjaEntity.getNsrmc());
        }
        //案件状态
        if (TsBqUtils.isNotNull(qtjaEntity.getAjjcztDm())) {
            if ("5".equals(qtjaEntity.getAjjcztDm())) {
                // 排除以1、2、3、4开头的
                queryWrapper.not(wrapper -> wrapper
                        .likeRight(QtjaEntity::getAjjcztDm, "1")
                        .or()
                        .likeRight(QtjaEntity::getAjjcztDm, "2")
                        .or()
                        .likeRight(QtjaEntity::getAjjcztDm, "3")
                        .or()
                        .likeRight(QtjaEntity::getAjjcztDm, "4")
                );
            } else {
                queryWrapper.likeRight(QtjaEntity::getAjjcztDm, qtjaEntity.getAjjcztDm());
            }
        }
        //检查科室
        String jcbmDm = qtjaEntity.getJcbmDm();
        if (TsBqUtils.isNull(jcbmDm) || "qj".equals(jcbmDm)) {
            queryWrapper.like(QtjaEntity::getJcbmDm, swjgDmTmp);
        } else if (!"qs".equals(jcbmDm)) {
            queryWrapper.like(QtjaEntity::getJcbmDm, jcbmDm);
        }
        //其他-立案日期
        if (TsBqUtils.isNotNull(qtjaEntity.getQtjalarqq())) {
            queryWrapper.between(QtjaEntity::getLarq, sdf.parse(qtjaEntity.getQtjalarqq()), sdf.parse(qtjaEntity.getQtjalarqz()));
        }
        //超六-立案日期
        if (TsBqUtils.isNotNull(qtjaEntity.getCljalarqq())) {
            queryWrapper.between(QtjaEntity::getLarq, sdf.parse(qtjaEntity.getCljalarqq()), sdf.parse(qtjaEntity.getCljalarqz()));
        }
        //案件标志
        queryWrapper.eq(QtjaEntity::getAjbz, qtjaEntity.getAjbz());
        queryWrapper.orderByDesc(QtjaEntity::getLarq);
        return this.page(page, queryWrapper);
    }

    @Override
    @DS("oracle")
    public List<QtjaEntity> exportQtjaTable(QtjaEntity qtjaEntity) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //获取当前税务机关代码
        String currentSwjgDm = httpSessionService.getCurrentDeptNo();
        String swjgDmTmp = currentSwjgDm.substring(0, 9);
        LambdaQueryWrapper<QtjaEntity> queryWrapper = Wrappers.lambdaQuery();
        //案件编号
        if (TsBqUtils.isNotNull(qtjaEntity.getJcajbh())) {
            queryWrapper.like(QtjaEntity::getJcajbh, qtjaEntity.getJcajbh());
        }
        //纳税人识别号
        if (TsBqUtils.isNotNull(qtjaEntity.getNsrsbh())) {
            queryWrapper.like(QtjaEntity::getNsrsbh, qtjaEntity.getNsrsbh());
        }
        //纳税人名称
        if (TsBqUtils.isNotNull(qtjaEntity.getNsrmc())) {
            queryWrapper.like(QtjaEntity::getNsrmc, qtjaEntity.getNsrmc());
        }
        //案件状态
        if (TsBqUtils.isNotNull(qtjaEntity.getAjjcztDm())) {
            if ("5".equals(qtjaEntity.getAjjcztDm())) {
                // 排除以1、2、3、4开头的
                queryWrapper.not(wrapper -> wrapper
                        .likeRight(QtjaEntity::getAjjcztDm, "1")
                        .or()
                        .likeRight(QtjaEntity::getAjjcztDm, "2")
                        .or()
                        .likeRight(QtjaEntity::getAjjcztDm, "3")
                        .or()
                        .likeRight(QtjaEntity::getAjjcztDm, "4")
                );
            } else {
                queryWrapper.likeRight(QtjaEntity::getAjjcztDm, qtjaEntity.getAjjcztDm());
            }
        }
        //检查科室
        String jcbmDm = qtjaEntity.getJcbmDm();
        if (TsBqUtils.isNull(jcbmDm) || "qj".equals(jcbmDm)) {
            queryWrapper.like(QtjaEntity::getJcbmDm, swjgDmTmp);
        } else if (!"qs".equals(jcbmDm)) {
            queryWrapper.like(QtjaEntity::getJcbmDm, jcbmDm);
        }
        //其他-立案日期
        if (TsBqUtils.isNotNull(qtjaEntity.getQtjalarqq())) {
            queryWrapper.between(QtjaEntity::getLarq, sdf.parse(qtjaEntity.getQtjalarqq()), sdf.parse(qtjaEntity.getQtjalarqz()));
        }
        //超六-立案日期
        if (TsBqUtils.isNotNull(qtjaEntity.getCljalarqq())) {
            queryWrapper.between(QtjaEntity::getLarq, sdf.parse(qtjaEntity.getCljalarqq()), sdf.parse(qtjaEntity.getCljalarqz()));
        }
        //案件标志
        queryWrapper.eq(QtjaEntity::getAjbz, qtjaEntity.getAjbz());
        queryWrapper.orderByDesc(QtjaEntity::getLarq);
        return this.list(queryWrapper);
    }
}